using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    // 要跟随的目标，我们在Inspector中把它设置为玩家
    [SerializeField] private Transform target;

    // (可选) 平滑移动的速度
    [SerializeField] private float smoothSpeed = 0.125f;

    // (可选) 摄像机相对于目标的固定偏移量
    [SerializeField] private Vector3 offset;

    // 每一帧的晚些时候被调用，在所有Update都执行完毕之后
    // 这是处理摄像机跟随的最佳位置
    void LateUpdate()
    {
        // 如果没有设置目标（比如玩家还没生成或已销毁），就什么都不做
        if (target == null)
        {
            return;
        }

        // --- 方案一：最简单的硬跟随 ---
        // 直接将摄像机的位置设置为目标位置，但要保持摄像机自己的Z轴坐标
        // transform.position = new Vector3(target.position.x, target.position.y, transform.position.z);
        
        // --- 方案二：带平滑效果的跟随 (推荐) ---
        // 1. 计算出摄像机期望到达的目标位置 (玩家位置 + 偏移量)
        Vector3 desiredPosition = target.position + offset;
        // 保持摄像机原有的Z轴坐标不变，非常重要！否则摄像机就看不到东西了
        desiredPosition.z = transform.position.z; 

        // 2. 使用线性插值(Lerp)平滑地移动摄像机
        // Vector3.Lerp(当前位置, 目标位置, 平滑系数)
        Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
        
        // 3. 更新摄像机的位置
        transform.position = smoothedPosition;
    }

    // (可选) 在编辑器中显示一个辅助线，方便我们看到摄像机和目标的连接
    void OnDrawGizmos()
    {
        if (target != null)
        {
            Gizmos.color = Color.yellow;
            Gizmos.DrawLine(transform.position, target.position);
        }
    }
}